﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Spring.Context;
using Spring.Context.Support;
using GRUPO_4.Negocio;
using GRUPO_4.Dominio;

namespace GRUPO_4.Pruebas
{
    [TestFixture]
    public class TestPuestoService
    {
        private IApplicationContext contexto = null;

        [TestFixtureSetUp]
        public void InicializarSpring()
        {
            this.contexto = new XmlApplicationContext(
                "assembly://GRUPO-4/GRUPO_4/CapaNegocio.xml",
                "assembly://GRUPO-4/GRUPO_4/CapaPersistencia.xml");
        }

        [Test]
        public void TestRealizarPuestoCorrectamente()
        {
            PuestoService puestoService = (PuestoService)this.contexto.GetObject("puestoService");
            Assert.NotNull(puestoService);
            Puesto puestoRealizado = null;
            Assert.DoesNotThrow(delegate
            {
                Puesto puestoNuevo = new Puesto();
                puestoNuevo.codPuesto= 212;
                puestoNuevo.descripcionPuesto= "Secretaria Gerencia";

                puestoRealizado = puestoService.CrearPuesto(puestoNuevo);
            });

            Assert.NotNull(puestoRealizado);
            Assert.Greater(puestoRealizado.codPuesto, 0);
        }
        [Test]
        public void TestEliminarPuesto()
        {

            PuestoService puestoService = (PuestoService)this.contexto.GetObject("puestoService");
            Assert.NotNull(puestoService);
            Puesto puestoExiste = puestoService.ObtenerPuesto(23);
            Puesto puestoEliminado = null;
            Assert.DoesNotThrow(delegate
            {
                puestoService.EliminarPuesto(puestoExiste);
            });
            Assert.Null(puestoEliminado);
        }

        [Test]
        public void TestListarPuesto()
        {
            PuestoService puestoService = (PuestoService)this.contexto.GetObject("puestoService");
            Assert.NotNull(puestoService);
            ICollection<Puesto> listaPuesto = null;
            Assert.DoesNotThrow(delegate
            {
                listaPuesto = puestoService.ListarTodoslosPuestos();
            });

            Console.WriteLine(listaPuesto.Count);
            Assert.Greater(listaPuesto.Count, 0);
            foreach (Puesto Ofer in listaPuesto)
            {
                Console.WriteLine(Ofer.codPuesto + "|" + Ofer.descripcionPuesto);
            }
        }

        [Test]
        public void TestConsultarPuesto()
        {
            PuestoService puestoService = (PuestoService)this.contexto.GetObject("puestoService");
            Assert.NotNull(puestoService);
            Puesto puestoConsultado = null;

            puestoConsultado = puestoService.ObtenerPuesto(123);

            Assert.NotNull(puestoConsultado);
        }
    }
}